/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.utn.tpsimulacion05;

import java.util.ArrayList;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author juan
 */
public class Puerto {
    
    Grua grua1;
    Grua grua2;
    Muelle muelle1;
    Muelle muelle2;
    Bahia bahia;
    Barco B;
    
    JTable tabla;
    DefaultTableModel dtm;
    
    ArrayList vectorAnterior = new ArrayList();
    ArrayList vectorNuevo= new ArrayList();
    Object[] fila;

    static double reloj = 0;
    String EVT = "";
    
    double randomLlegada = 0;
    double tiempoEntreLlegadas = 0;
    double tiempoProxLlegada = 0;

    String estadoMuelle1 = "L";
    String estadoMuelle2 = "L";


    double inicioTiempoDescargaG1 = 0;
    double randomDescargaG1 = 0 ;
    boolean dosGruasEnM1 = false;
    double tiempoDescargaG1 = 0;
    double tiempoRecalculadoG1 = 0;
    double tiempoFinDescargaG1 = 0;
    String estadoG1 = "L";


    double inicioTiempoDescargaG2 = 0;
    double randomDescargaG2 = 0;
    boolean dosGruasEnM2 = false;
    double tiempoDescargaG2 = 0;
    double tiempoRecalculadoG2 = 0;
    double tiempoFinDescargaG2 = 0;
    String estadoG2 = "L";
    
    double cola = 0;
    
    double acumuladorGrua1 = 0;
    double acumuladorGrua2 = 0;
    double contadorFila1= 0;
    double contadorFila2= 0;
    
    public Puerto(JTable tabla)
    {
        this.tabla=tabla;
        dtm = (DefaultTableModel) tabla.getModel();
        
        grua1 = new Grua(true,false,false);
        grua2 = new Grua(true,false,false);
        muelle1 = new Muelle(true);
        muelle2 = new Muelle(true);
        bahia = new Bahia();
    } 
    
    public void simular()
    {
       while(reloj < 90)
       {
            if (reloj == 0)
            {
             //Calculo random para la llegada del primer barco
              randomLlegada = Math.random();
              tiempoEntreLlegadas= RandomsManager.getTiempoLlegadaBarco(randomLlegada);
              tiempoProxLlegada = reloj + tiempoEntreLlegadas;
              
              vectorNuevo.add(reloj); //reloj = 0; 0
              vectorNuevo.add(EVT); // EVT = ""; 1
              vectorNuevo.add(randomLlegada); //2
              vectorNuevo.add(tiempoEntreLlegadas); //3
              vectorNuevo.add(tiempoProxLlegada);//4
              vectorNuevo.add(estadoMuelle1);//5 "L"
              vectorNuevo.add(estadoMuelle2); //6 "L"
              vectorNuevo.add(inicioTiempoDescargaG1); //7
              vectorNuevo.add(randomDescargaG1); //8
              vectorNuevo.add(dosGruasEnM1); // 9
              vectorNuevo.add(tiempoDescargaG1); // 10
              vectorNuevo.add(tiempoRecalculadoG1); // 11
              vectorNuevo.add(tiempoFinDescargaG1); // 12
              vectorNuevo.add(estadoG1); //13 "L"
              vectorNuevo.add(inicioTiempoDescargaG2); //14
              vectorNuevo.add(randomDescargaG2); // 15
              vectorNuevo.add(dosGruasEnM2); //16
              vectorNuevo.add(tiempoDescargaG2); // 17
              vectorNuevo.add(tiempoRecalculadoG2); //18
              vectorNuevo.add(tiempoFinDescargaG2); //19
              vectorNuevo.add(estadoG2);//20 "L"
              vectorNuevo.add(cola); //21

              //El vectorNuevo ahora pasa a ser el vectorAnterior, dodnde quedan guardados los datos!
              
              fila = vectorNuevo.toArray();
              dtm.addRow(fila);
              vectorAnterior.addAll(vectorNuevo);
              System.out.println(vectorNuevo.toString());
              vectorNuevo.clear();
              
              llegadaBarco(tiempoProxLlegada);
        }
        
        else
        {   
           
            if(tiempoProxLlegada<tiempoFinDescargaG1 && tiempoFinDescargaG2==0)
                llegadaBarco(tiempoProxLlegada);
            
            else if(tiempoProxLlegada<tiempoFinDescargaG2 && tiempoFinDescargaG1==0)
                llegadaBarco(tiempoProxLlegada);
            
            else if (tiempoProxLlegada<tiempoFinDescargaG1 && tiempoProxLlegada<tiempoFinDescargaG2)
                llegadaBarco(tiempoProxLlegada);
            
            else if (tiempoFinDescargaG1==0 && tiempoFinDescargaG2==0)
                llegadaBarco(tiempoProxLlegada);
            
            else if (tiempoFinDescargaG1<tiempoProxLlegada && tiempoFinDescargaG2==0)
               finDescarga(grua1,tiempoFinDescargaG1);
            
            else if (tiempoFinDescargaG1<tiempoProxLlegada && tiempoFinDescargaG1<tiempoFinDescargaG2 && tiempoFinDescargaG1!=0)
               finDescarga(grua1,tiempoFinDescargaG1);
            
           else if (tiempoFinDescargaG2<tiempoProxLlegada && tiempoFinDescargaG1==0)
               finDescarga(grua2,tiempoFinDescargaG2);
            
           else if (tiempoFinDescargaG2<tiempoProxLlegada && tiempoFinDescargaG2<tiempoFinDescargaG1 && tiempoFinDescargaG2!=0)
               finDescarga(grua2,tiempoFinDescargaG2); 
        }
      }
    }
    
    public void llegadaBarco(double proxLlb)
    {
         System.out.println("Llegada Barco");
         reloj = proxLlb;
         System.out.println("Reloj: " + reloj);
         EVT = "LLB";
         B = new Barco();

         
       //Calculo random para la llegada del siguiente barco...
                  
        randomLlegada = Math.random();                
        tiempoEntreLlegadas= RandomsManager.getTiempoLlegadaBarco(randomLlegada);                
        tiempoProxLlegada = reloj + tiempoEntreLlegadas;
                
        asignarMuelle(proxLlb,B);
    }
    
    public void asignarMuelle(double llegadaBarco, Barco B)
    {   
        boolean muelleAsignado = false;
                       
        //Asigno algun muelle si alguno de los dos esta libre...
        if (muelle1.isEstalibre()==true)
        {
            muelleAsignado=true;
            muelle1.setEstaLibre(false);
            muelle1.setEstaOcupado(true);
            
            estadoMuelle1 = "O";
            
            if (grua1.isEstaOcupadaEnMuelle2()==true)
            {
                grua1.setEstaLibre(true);
                this.dosGruasEnM2=false;
                grua1.setEstaOcupadaEnMuelle2(false);
                this.tiempoRecalculadoG2 = (grua2.getFinTiempoDescarga() - reloj)*2;
                
                this.grua2.setTiempoRecalculado(tiempoRecalculadoG2);
                this.tiempoDescargaG2 = tiempoRecalculadoG2;
                this.grua2.setTiempoDescarga(tiempoDescargaG2);
                
                inicioTiempoDescargaG1 = llegadaBarco;
                grua1.setInicioTiempoDescarga(inicioTiempoDescargaG1);
                
                this.tiempoFinDescargaG2 = grua1.getInicioTiempoDescarga() + grua2.getTiempoDescarga();
                this.grua2.setFinTiempoDescarga(tiempoFinDescargaG2);
                
            }
                        
            //Asigno alguna de las gruas o las dos si entan libres
            if (grua1.isEstaLibre()==true)
            {
                this.dosGruasEnM1=false; 
                grua1.setEstaLibre(false);
                grua1.setEstaOcupadaEnMuelle1(true);
                grua1.setEstaOcupadaEnMuelle2(false);
                inicioTiempoDescargaG1 = llegadaBarco;
                estadoG1 = "OM1";
                grua1.setInicioTiempoDescarga(inicioTiempoDescargaG1);                       
                B.setLlegadaAMuelle(llegadaBarco);
                             
                randomDescargaG1=Math.random();
                tiempoDescargaG1 = RandomsManager.getTiempoDescarga(randomDescargaG1);
                grua1.setTiempoDescarga(tiempoDescargaG1);

                tiempoFinDescargaG1 = (grua1.getInicioTiempoDescarga() + grua1.getTiempoDescarga());
                grua1.setFinTiempoDescarga(tiempoFinDescargaG1);
                B.setSalidaDeMuelle(tiempoFinDescargaG1); 
                
                                
             }
            
            if (grua2.isEstaLibre()==true)
            {
                grua2.setEstaLibre(false);
                grua2.setEstaOcupadaEnMuelle1(true);
                grua2.setEstaOcupadaEnMuelle2(false);
                estadoG2 = "OM1";
                
            }
            //Si asigne las dos gruas recalculo el tiempo...
            if ((grua1.isEstaOcupadaEnMuelle1()==true && grua2.isEstaOcupadaEnMuelle1()==true))
            {
                dosGruasEnM1=true;
                tiempoDescargaG1 = tiempoDescargaG1/2;
                grua1.setTiempoDescarga(tiempoDescargaG1);

                tiempoFinDescargaG1 = (grua1.getInicioTiempoDescarga() + grua1.getTiempoDescarga());
                grua1.setFinTiempoDescarga(tiempoFinDescargaG1);
                B.setSalidaDeMuelle(tiempoFinDescargaG1);
                             

            }       
        }
       
        else if (muelle2.isEstalibre()==true && muelleAsignado == false)
        {
            muelleAsignado= true;
            muelle2.setEstaLibre(false);
            muelle2.setEstaOcupado(true);
            estadoMuelle2 = "O";
            
            if (grua2.isEstaOcupadaEnMuelle1()==true)
            {
                grua2.setEstaLibre(true);
                grua2.setEstaOcupadaEnMuelle1(false);
                this.dosGruasEnM1=false;
                this.tiempoRecalculadoG1 = (grua1.getFinTiempoDescarga() - reloj) *2;
                this.grua1.setTiempoRecalculado(tiempoRecalculadoG1);
                this.tiempoDescargaG1=tiempoRecalculadoG1;
                this.grua1.setTiempoDescarga(tiempoRecalculadoG1);
                
                inicioTiempoDescargaG2 = llegadaBarco;
                grua2.setInicioTiempoDescarga(inicioTiempoDescargaG2);
                
                this.tiempoFinDescargaG1 = grua2.getInicioTiempoDescarga() + grua1.getTiempoDescarga();
                this.grua1.setFinTiempoDescarga(tiempoFinDescargaG1);
                
            }
                       
            if (grua2.isEstaLibre()==true)
            {
                grua2.setEstaLibre(false);
                grua2.setEstaOcupadaEnMuelle1(false);
                grua2.setEstaOcupadaEnMuelle2(true);
                inicioTiempoDescargaG2 = llegadaBarco;
                estadoG2 = "OM2";
                grua2.setInicioTiempoDescarga(inicioTiempoDescargaG2);
                B.setLlegadaAMuelle(llegadaBarco);
                
                dosGruasEnM2=false;
                randomDescargaG2=Math.random();
                tiempoDescargaG2 = RandomsManager.getTiempoDescarga(randomDescargaG2);
                grua2.setTiempoDescarga(tiempoDescargaG2);

                tiempoFinDescargaG2 = (grua2.getInicioTiempoDescarga() + grua2.getTiempoDescarga());
                grua2.setFinTiempoDescarga(tiempoFinDescargaG2);
                B.setSalidaDeMuelle(tiempoFinDescargaG2);
                                
            }
            
            if (grua1.isEstaLibre()==true)
            {
                grua1.setEstaLibre(false);
                grua1.setEstaOcupadaEnMuelle1(false);
                grua1.setEstaOcupadaEnMuelle2(true);
                estadoG1 = "OM2";   
                
             }
            
            if ((grua1.isEstaOcupadaEnMuelle2()==true && grua2.isEstaOcupadaEnMuelle2()==true))
            {
                dosGruasEnM2=true;    
                tiempoDescargaG2 = tiempoDescargaG2/2;
                grua2.setTiempoDescarga(tiempoDescargaG2);

                tiempoFinDescargaG2 = (grua2.getInicioTiempoDescarga() + grua2.getTiempoDescarga());
                grua2.setFinTiempoDescarga(tiempoFinDescargaG2);
                B.setSalidaDeMuelle(tiempoFinDescargaG2);
                   
            } 
        }
        //Si ninguno de los dos muelles esta libre, el barco va a la cola
        else
        {
            B.setLlegadaABahia(llegadaBarco);
            bahia.agregarBarco(B);
            cola = bahia.getCola();
            B=null;
        }
        
        vectorNuevo.add(reloj);
        vectorNuevo.add(EVT);
        vectorNuevo.add(randomLlegada);
        vectorNuevo.add(tiempoEntreLlegadas);
        vectorNuevo.add(tiempoProxLlegada); 
        vectorNuevo.add(estadoMuelle1);
        vectorNuevo.add(estadoMuelle2);
        vectorNuevo.add(inicioTiempoDescargaG1);
        vectorNuevo.add(randomDescargaG1);
        vectorNuevo.add(dosGruasEnM1);
        vectorNuevo.add(tiempoDescargaG1);
        vectorNuevo.add(tiempoRecalculadoG1);
        vectorNuevo.add(tiempoFinDescargaG1);
        vectorNuevo.add(estadoG1);
        vectorNuevo.add(inicioTiempoDescargaG2);
        vectorNuevo.add(randomDescargaG2);
        vectorNuevo.add(dosGruasEnM2);
        vectorNuevo.add(tiempoDescargaG2);
        vectorNuevo.add(tiempoRecalculadoG2);
        vectorNuevo.add(tiempoFinDescargaG2);
        vectorNuevo.add(estadoG2);
        vectorNuevo.add(cola);
        
        this.acumuladorGrua1+=tiempoDescargaG1;
        this.acumuladorGrua2+=tiempoDescargaG2;
           
        fila = vectorNuevo.toArray();
        dtm.addRow(fila);
        this.contadorFila1++;
        this.contadorFila2++;
        vectorAnterior.addAll(vectorNuevo);
        vectorNuevo.clear();
    }
    
    public void finDescarga(Grua grua, double finTpoDescarga)
    {
        System.out.println("Fin Descarga");
        reloj = finTpoDescarga;
        EVT = "FD";
        boolean ayuda= false;
        
        if (bahia.getCola()>0)
        {
            if (grua == grua1)
            {           
                if (grua1.isEstaOcupadaEnMuelle1()==true)
                {
                    muelle1.setEstaLibre(true);
                    muelle1.setEstaOcupado(false);
                    grua1.setEstaLibre(true);
                    grua1.setEstaOcupadaEnMuelle1(false);

                    estadoMuelle1="L";
                    estadoG1="L";                  
                                        
                    if (grua2.isEstaOcupadaEnMuelle1()==true)
                    {
                        grua2.setEstaLibre(true);
                        grua2.setEstaOcupadaEnMuelle1(false);
                        estadoG2="L";
                        
                        estadoG2="L";
                        grua2.setEstaOcupadaEnMuelle1(false);
                        grua2.setEstaLibre(true); 
                    }
                }

                if (grua1.isEstaOcupadaEnMuelle2()==true)
                {
                    muelle2.setEstaLibre(true);
                    muelle2.setEstaOcupado(false);
                    grua1.setEstaLibre(true);
                    grua1.setEstaOcupadaEnMuelle2(false);

                    estadoMuelle2="L";
                    estadoG1="L";
                    
                    if (grua2.isEstaOcupadaEnMuelle2()==true)
                    {
                        estadoG2="L";
                        grua2.setEstaOcupadaEnMuelle2(false);
                        grua2.setEstaLibre(true);
                    }
                }
                
                inicioTiempoDescargaG1 = 0;
                randomDescargaG1 = 0 ;
                dosGruasEnM1 = false;
                tiempoDescargaG1 = 0;
                tiempoRecalculadoG1 = 0;
                tiempoFinDescargaG1 = 0;       
            }

            if (grua == grua2)
            {
                if (grua2.isEstaOcupadaEnMuelle1())
                {
                    muelle1.setEstaLibre(true);
                    muelle1.setEstaOcupado(false);
                    grua2.setEstaLibre(true);
                    grua2.setEstaOcupadaEnMuelle1(false);
                    estadoMuelle1="L";
                    estadoG2="L"; 
                                                  
                    if (grua1.isEstaOcupadaEnMuelle1()==true)
                    {
                        estadoG1="L";
                        grua1.setEstaOcupadaEnMuelle1(false);
                        grua1.setEstaLibre(true);
                    }
                }

                if (grua2.isEstaOcupadaEnMuelle2())
                {
                    muelle2.setEstaLibre(true);
                    muelle2.setEstaOcupado(false);
                    grua2.setEstaLibre(true);
                    grua2.setEstaOcupadaEnMuelle2(false);
                    estadoMuelle2="L";
                    estadoG2="L";
                    
                    if (grua1.isEstaOcupadaEnMuelle2()==true)
                    {
                        estadoG1="L";
                        grua1.setEstaOcupadaEnMuelle2(false);
                        grua1.setEstaLibre(true);
                    }
                    
                    
                }
                
                inicioTiempoDescargaG2 = 0;
                randomDescargaG2 = 0 ;
                dosGruasEnM2 = false;
                tiempoDescargaG2 = 0;
                tiempoRecalculadoG2 = 0;
   
            }
            
            Barco b = bahia.getBarco();
            b.setSalidaDeBahia(finTpoDescarga);
            bahia.copiarBarco(b);
            bahia.quitarBarco();
            cola = bahia.getCola();
            this.asignarMuelle(finTpoDescarga, b);  
        }

        else
        {
            if (grua == grua1)
            {           
                if (grua1.isEstaOcupadaEnMuelle1()==true)
                {
                    muelle1.setEstaLibre(true);
                    muelle1.setEstaOcupado(false);
                    grua1.setEstaLibre(true);
                    grua1.setEstaOcupadaEnMuelle1(false);

                    estadoMuelle1="L";                
                    estadoG1="L"; 
                    
                    if (grua2.isEstaOcupadaEnMuelle1()==true)
                    {
                        grua2.setEstaLibre(true);
                        grua2.setEstaOcupadaEnMuelle1(false);
                        estadoG2="L";
                        dosGruasEnM1=false;
                    }
                    
                    //Si el muelle 2 esta ocupado, significa que la grua 2 esta trabajando ahi...
                    //entonces grua1 va a ayudarla
                    if (grua2.isEstaOcupadaEnMuelle2()==true)
                    {
                        ayuda=true;
                        grua1.setEstaOcupadaEnMuelle2(true);
                        grua1.setEstaLibre(false);
                        estadoG1="OM2";
                        this.dosGruasEnM2=true;
                        //Lo que me falta para terminar / 2;
                        this.tiempoRecalculadoG2 = (grua2.getFinTiempoDescarga() - reloj)/2;
                        
                        //Nuevo tiempo de descarga
                        this.tiempoDescargaG2 = tiempoRecalculadoG2;
                        
                        //Seteo...
                        this.grua2.setTiempoRecalculado(tiempoRecalculadoG2);
                        this.grua2.setTiempoDescarga(tiempoDescargaG2);
                        
                        this.tiempoFinDescargaG2 = reloj + tiempoDescargaG2;
                        this.grua2.setFinTiempoDescarga(tiempoFinDescargaG2);
                        
                        this.acumuladorGrua1 += tiempoDescargaG2;
                        
                    }         
                }

                if (grua1.isEstaOcupadaEnMuelle2()==true && ayuda==false)
                {
                    muelle2.setEstaLibre(true);
                    muelle2.setEstaOcupado(false);
                    grua1.setEstaLibre(true);
                    grua1.setEstaOcupadaEnMuelle2(false);

                    estadoMuelle2="L";
                    estadoG1="L";
                    
                    if (grua2.isEstaOcupadaEnMuelle2()==true)
                    {
                        grua2.setEstaLibre(true);
                        grua2.setEstaOcupadaEnMuelle2(false);
                        estadoG2="L";
                        dosGruasEnM2=false;
                    }
                    
                    //Grua1 ayuda a grua2 en muelle 1
                    if (grua2.isEstaOcupadaEnMuelle1()==true)
                    {
                        ayuda=true;
                        grua1.setEstaOcupadaEnMuelle1(true);
                        grua1.setEstaLibre(false);
                        estadoG1="OM1";
                        this.dosGruasEnM1=true;
                        //Lo que me falta para terminar / 2;
                        this.tiempoRecalculadoG2 = (grua2.getFinTiempoDescarga() - reloj)/2;
                        
                        //Nuevo tiempo de descarga
                        this.tiempoDescargaG2 = tiempoRecalculadoG2;
                        
                        //Seteo...
                        this.grua2.setTiempoRecalculado(tiempoRecalculadoG2);
                        this.grua2.setTiempoDescarga(tiempoDescargaG2);
                        
                        this.tiempoFinDescargaG2 = reloj + tiempoDescargaG2;
                        this.grua2.setFinTiempoDescarga(tiempoFinDescargaG2);
                        
                        this.acumuladorGrua1 += tiempoDescargaG2;
                        
                    }
    
                }
                
                inicioTiempoDescargaG1 = 0;
                randomDescargaG1 = 0 ;
                tiempoDescargaG1 = 0;
                tiempoRecalculadoG1 = 0;
                tiempoFinDescargaG1 = 0;
            }

            if (grua == grua2)
            {
                if (grua2.isEstaOcupadaEnMuelle1()==true)
                {
                    muelle1.setEstaLibre(true);
                    muelle1.setEstaOcupado(false);
                    grua2.setEstaLibre(true);
                    grua2.setEstaOcupadaEnMuelle1(false);
                    estadoMuelle1="L";
                    estadoG2="L"; 
                    
                    if (grua1.isEstaOcupadaEnMuelle1()==true)
                    {
                        grua1.setEstaLibre(true);
                        grua1.setEstaOcupadaEnMuelle1(false);
                        estadoG1="L";
                        dosGruasEnM1 = false;        
                    }
                    
                    if (grua1.isEstaOcupadaEnMuelle2()==true)
                    {
                        ayuda=true;
                        grua2.setEstaOcupadaEnMuelle2(true);
                        grua2.setEstaLibre(false);
                        estadoG2="OM2";
                        this.dosGruasEnM2=true;
                        //Lo que me falta para terminar / 2;
                        this.tiempoRecalculadoG1 = (grua1.getFinTiempoDescarga() - reloj)/2;
                        
                        //Nuevo tiempo de descarga
                        this.tiempoDescargaG1 = tiempoRecalculadoG1;
                        
                        //Seteo...
                        this.grua1.setTiempoRecalculado(tiempoRecalculadoG1);
                        this.grua1.setTiempoDescarga(tiempoDescargaG1);
                        
                        this.tiempoFinDescargaG1 = reloj + tiempoDescargaG1;
                        this.grua1.setFinTiempoDescarga(tiempoFinDescargaG1); 
                        
                        this.acumuladorGrua2 += tiempoDescargaG1;
                    }
   
                }

                if (grua2.isEstaOcupadaEnMuelle2()==true && ayuda==false)
                {
                    muelle2.setEstaLibre(true);
                    muelle2.setEstaOcupado(false);
                    grua2.setEstaLibre(true);
                    grua2.setEstaOcupadaEnMuelle2(false);
                    estadoMuelle2="L";
                    estadoG2="L";
                    
                    if (grua1.isEstaOcupadaEnMuelle2()==true)
                    {
                        grua1.setEstaLibre(true);
                        grua1.setEstaOcupadaEnMuelle2(false);
                        estadoG1="L";
                        dosGruasEnM2=false;
                    }
                    
                    if (grua1.isEstaOcupadaEnMuelle1()==true)
                    {
                        ayuda=true;
                        grua2.setEstaOcupadaEnMuelle1(true);
                        grua2.setEstaLibre(false);
                        estadoG2="OM1";
                        this.dosGruasEnM1=true;
                        //Lo que me falta para terminar / 2;
                        this.tiempoRecalculadoG1 = (grua1.getFinTiempoDescarga() - reloj)/2;
                        
                        //Nuevo tiempo de descarga
                        this.tiempoDescargaG1 = tiempoRecalculadoG1;
                        
                        //Seteo...
                        this.grua1.setTiempoRecalculado(tiempoRecalculadoG1);
                        this.grua1.setTiempoDescarga(tiempoDescargaG1);
                        
                        this.tiempoFinDescargaG1 = reloj + tiempoDescargaG1;
                        this.grua1.setFinTiempoDescarga(tiempoFinDescargaG1);
                        
                        this.acumuladorGrua2 += tiempoDescargaG1;
                        
                    }
 
                }
                
                inicioTiempoDescargaG2 = 0;
                randomDescargaG2 = 0 ;
                tiempoDescargaG2 = 0;
                tiempoRecalculadoG2 = 0;
                tiempoFinDescargaG2 = 0;    
            }
            
              vectorNuevo.add(reloj); //reloj = 0; 0
              vectorNuevo.add(EVT); // EVT = ""; 1
              vectorNuevo.add(randomLlegada); //2
              vectorNuevo.add(tiempoEntreLlegadas); //3
              vectorNuevo.add(tiempoProxLlegada);//4
              vectorNuevo.add(estadoMuelle1);//5
              vectorNuevo.add(estadoMuelle2); //6
              vectorNuevo.add(inicioTiempoDescargaG1); //7
              vectorNuevo.add(randomDescargaG1); //8
              vectorNuevo.add(dosGruasEnM1); // 9
              vectorNuevo.add(tiempoDescargaG1); // 10
              vectorNuevo.add(tiempoRecalculadoG1); // 11
              vectorNuevo.add(tiempoFinDescargaG1); // 12
              vectorNuevo.add(estadoG1); //13
              vectorNuevo.add(inicioTiempoDescargaG2); //14
              vectorNuevo.add(randomDescargaG2); // 15
              vectorNuevo.add(dosGruasEnM2); //16
              vectorNuevo.add(tiempoDescargaG2); // 17
              vectorNuevo.add(tiempoRecalculadoG2); //18
              vectorNuevo.add(tiempoFinDescargaG2); //19
              vectorNuevo.add(estadoG2);//20
              vectorNuevo.add(cola); //21
              
              
              
              fila = vectorNuevo.toArray();
              dtm.addRow(fila);
              if (ayuda==true)
              {
                this.contadorFila1++;
                this.contadorFila2++;
              }
              System.out.println(vectorNuevo.toString());
              vectorAnterior.addAll(vectorNuevo);
              vectorNuevo.clear();        
        }
    }

    public Barco getB() {
        return B;
    }

    public Bahia getBahia() {
        return bahia;
    }

    public Grua getGrua1() {
        return grua1;
    }

    public Grua getGrua2() {
        return grua2;
    }

    public Muelle getMuelle1() {
        return muelle1;
    }

    public Muelle getMuelle2() {
        return muelle2;
    }

    public double getAcumuladorGrua1() {
        return acumuladorGrua1;
    }

    public double getAcumuladorGrua2() {
        return acumuladorGrua2;
    }

    public static double getReloj() {
        return reloj;
    }
    
    public double porcentajeUsoGrua1()
    {
        double porc = 0;
        porc = (getAcumuladorGrua1()/getReloj())*100;
        return porc;
    }
    
    public double porcentajeUsoGrua2()
    {
        double porc = 0;
        porc = (getAcumuladorGrua2()/getReloj())*100;
        return porc;
    }

    public double getContadorFila1() {
        return contadorFila1;
    }

    public double getContadorFila2() {
        return contadorFila2;
    }
}
    